package org.springblade.core.license.listener;

import de.schlichtherle.license.LicenseContent;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.license.LicenseVerify;
import org.springblade.core.license.LicenseVerifyParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

/**
 * 在项目启动时安装证书
 *
 * @author zifangsky
 * @date 2018/4/24
 * @since 1.0.0
 */
@Slf4j
@ConditionalOnProperty(value = "version.enable", havingValue = "true")
@Component
public class LicenseCheckListener implements ApplicationListener<ContextRefreshedEvent> {

	/**
	 * 证书subject
	 */
	@Value("${version.subject}")
	private String subject;

	/**
	 * 公钥别称
	 */
	@Value("${version.publicAlias}")
	private String publicAlias;

	/**
	 * 访问公钥库的密码
	 */
	@Value("${version.storePass}")
	private String storePass;

	/**
	 * 证书生成路径
	 */
	@Value("${version.licensePath}")
	private String licensePath;

	/**
	 * 密钥库存储路径
	 */
	@Value("${version.publicKeysStorePath}")
	private String publicKeysStorePath;


	private boolean init = false;


	@Override
	public void onApplicationEvent(ContextRefreshedEvent event) {
		if (init) {
			log.info("duble");
			return;
		}
		if (StringUtils.isNotBlank(licensePath)) {
			log.info("++++++++  v c b ++++++++");
			LicenseVerifyParam param = new LicenseVerifyParam();
			param.setSubject(subject);
			param.setPublicAlias(publicAlias);
			param.setStorePass(storePass);
			param.setLicensePath(licensePath);
			param.setPublicKeysStorePath(publicKeysStorePath);

			LicenseVerify licenseVerify = new LicenseVerify();
			//安装证书
			licenseVerify.install(param);
			log.info("++++++++ v c e ++++++++");
		}
		init = true;
	}
}
